/*
 * EntityDao.java
 * @author kim
 * @version 1.1
 */
package com.tim.framework.dao;

import java.io.Serializable;
import java.util.List;
import com.tim.framework.common.PageProperty;

/**
 * 定义每个域对象的增删查改的基本操作及分页操作的数据
 * 
 * @author kim
 * @version 1.1
 */
public interface EntityDao<T> {
	// 得到数据对象
	public abstract T getById(Serializable id);

	// 创建数据对象
	public abstract Serializable create(T po);

	// 修改数据对象
	public abstract void update(T po);

	// 删除数据对象
	public abstract void delete(T po);

	// 得到所有数据对象列表
	public abstract List<T> findAll();

	// 得到所有数据数量
	public abstract int findAllCount();

	// 得到数据对象列表按分页条件 当pp.getNpageSize=0时返回所有
	public abstract List<T> findPageList(PageProperty pp);

	// 得到数据数量按分页条件
	public abstract int findCount(PageProperty pp);

	/**
	 * 执行update或delete的hql语句.
	 * 
	 * @param String
	 *            执行语句的模式update或delete
	 * @param String
	 *            update或delete之后的sql语句
	 * @param List
	 *            执行参数
	 * @return Integer 影响的行数.
	 */
	public Integer executeUpdate(final String model, final String sql,
			final List<Object> params);

	// 执行hql查询语句
	@SuppressWarnings("unchecked")
	public List executeHqlQuery(final String sql, final List<Object> params);

}